/**
 * API 配置文件
 * 用于管理全局接口前缀和其他API相关配置
 */

/**
 * 接口基础URL配置
 * - API_BASE_URL: 后端接口基础路径前缀
 * - DEV_PREFIX: 开发环境接口前缀
 * - PROD_PREFIX: 生产环境接口前缀
 * - CORS_ENABLED: 是否启用CORS配置
 * - ALLOWED_ORIGINS: 允许的源列表
 */
interface APIConfig {
  /** 后端接口基础路径前缀 */
  API_BASE_URL: string;
  /** 开发环境接口前缀 */
  DEV_PREFIX: string;
  /** 生产环境接口前缀 */
  PROD_PREFIX: string;
  /** 是否启用CORS配置 */
  CORS_ENABLED: boolean;
  /** 允许的源列表 */
  ALLOWED_ORIGINS: string[];
}

/**
 * API配置
 * 根据不同环境使用不同的前缀
 */
export const API_CONFIG: APIConfig = {
  // 基础接口URL 
  // 开发环境: http://localhost:8084
  // 生产环境: https://api.techuang.com 或根据实际情况修改
  API_BASE_URL: import.meta.env.DEV ? 'http://localhost:8084' : 'https://api.techuang.com',
  
  // 开发环境下的接口前缀 
  // 完整前缀将是：http://localhost:8084/client
  DEV_PREFIX: '/client',
  
  // 生产环境下的接口前缀
  // TODO: 部署上线时根据实际情况修改此处的生产环境API前缀
  // 完整前缀将是：https://api.techuang.com/api
  PROD_PREFIX: '/api',

  // 是否启用CORS配置
  CORS_ENABLED: true,

  // 允许的源列表
  ALLOWED_ORIGINS: [
    'http://localhost:8080',
    'http://localhost:3000',
    'http://localhost:8084',
    'https://techuang.com',
    'https://www.techuang.com'
  ]
};

/**
 * 获取完整的API路径
 * @param path API路径（不包含前缀）
 * @returns 返回带前缀的完整API路径
 */
export function getApiUrl(path: string): string {
  const prefix = import.meta.env.DEV ? API_CONFIG.DEV_PREFIX : API_CONFIG.PROD_PREFIX;
  
  // 确保path以'/'开头
  const formattedPath = path.startsWith('/') ? path : `/${path}`;
  
  return `${prefix}${formattedPath}`;
}

/**
 * API模块名称枚举
 * 用于在不同的API模块间切换
 */
export enum ApiModule {
  /** 通用接口模块 */
  COMMON = 'common',
  
  /** 认证相关接口模块 */
  AUTH = 'auth',
  
  /** 用户相关接口模块 */
  USER = 'user',
  
  /** 产品相关接口模块 */
  PRODUCT = 'product',
  
  /** 预约相关接口模块 */
  RESERVATION = 'reservation'
}

/**
 * 生成模块化API路径
 * @param module API模块名
 * @param path API路径（不包含模块名和前缀）
 * @returns 完整的API路径
 */
export function getModuleApiUrl(module: ApiModule, path: string): string {
  // 确保path以'/'开头
  const formattedPath = path.startsWith('/') ? path : `/${path}`;
  
  return getApiUrl(`/${module}${formattedPath}`);
}

/**
 * 检查请求源是否在允许的列表中
 * @param origin 请求源
 * @returns 如果源在允许列表中返回true，否则返回false
 */
export function isOriginAllowed(origin: string): boolean {
  if (!API_CONFIG.CORS_ENABLED) return true;
  return API_CONFIG.ALLOWED_ORIGINS.includes(origin) || API_CONFIG.ALLOWED_ORIGINS.includes('*');
}

export default API_CONFIG; 